//
//  VVTextView+Extension.swift
//  Weibo
//
//  Created by 王惠平 on 2017/4/8.
//  Copyright © 2017年 Will Wang. All rights reserved.
//

import UIKit

extension VVTextView {
    
    //获取富文本对应的字符串
    var emoticonText: String {
        
        var sendMessage = ""
        
        //遍历textView的富文本
        self.attributedText.enumerateAttributes(in: NSMakeRange(0, self.attributedText.length), options: []) { (info, range, _) in
            
            //info:富文本信息
            //range: 范围
            //print(info,"---------",NSStringFromRange(range))
            
            if let attachment = info["NSAttachment"] as? VVTextAttachment {
                
             //有文本附件,表示图片表情
                let emoticon = attachment.emoticon!
                
                //获取表情描述
                let chs = emoticon.chs!
                
                sendMessage += chs
                
            } else {
                
                //文字的富文本
                //根据范围获取文字的富文本
                let subAttributedStr = self.attributedText.attributedSubstring(from: range)
                
                //根据文字富文本获取字符串
                let text = subAttributedStr.string
                
                sendMessage += text
            }
        }
            return sendMessage
        
        }
    
    //根据表情模型插入表情富文本
    func insertEmoticon(emoticon: VVEmoticon) {
        
        
        if emoticon.type == "0" {
            
            //图片表情
            //要想插入表情,需要完成图片转富文本
            //记录上次的富文本
            let lastAttribtedString = NSMutableAttributedString(attributedString: self.attributedText)
//            
//            //1.创建图片对象
//            let image = UIImage(named: emoticon.path!)
//            
//            //2.创建文本附件设置图片
//            let attachMent = VVTextAttachment()
//            
//            //设置图片
//            attachMent.image = image
//            
//            //设置表情模型
//            attachMent.emoticon = emoticon
//            
//            //获取字体的高度
//            let lineHeight = self.font!.lineHeight
//            
//            //设置图片大小
//            //设置bounds改变子控件显示位置
//            attachMent.bounds = CGRect(x: 0, y: -4, width: lineHeight, height: lineHeight)
//            
//            //3.根据文本附件创建富文本
//            let attrbuteStr = NSAttributedString(attachment: attachMent)
            
            //根据文本附件创建富文本
            let attrbuteStr = NSAttributedString.attributedStringWithEmoticon(emoticon: emoticon, font: self.font!)
            
            //拼接富文本
            //lastAttribtedString.append(attrbuteStr)
            
            //获取富文本的选中范围
            var selectedRang = self.selectedRange
            
            //替换指定范围的富文本
            lastAttribtedString.replaceCharacters(in: selectedRang, with: attrbuteStr)
            
            //设置富文本的字体大小
            lastAttribtedString.addAttributes([NSFontAttributeName:self.font!], range: NSMakeRange(0, lastAttribtedString.length))
            
            //4.设置富文本
            self.attributedText = lastAttribtedString
            
            //插入表情选中范围的位置加1
            selectedRang.location += 1
            
            //选中范围的长度改为0作为光标使用
            selectedRang.length = 0
            
            //设置选中范围,长度改成0
            self.selectedRange = selectedRang
            
            //主动调用文字改变的代理方法和文字改变的通知
            self.delegate?.textViewDidChange?(self)
            
            //发送文字改变的通知
            NotificationCenter.default.post(name: NSNotification.Name.UITextViewTextDidChange, object: nil)
            
            
        } else {
            
            //emoji表情
            let emoji = (emoticon.code! as NSString).emoji()!
            
            self.insertText(emoji)
        }
    }
}
